package cn.b.sky.mes.mm.dao;

import java.util.Date;
import java.util.List;

import cn.b.sky.mes.mm.model.Distribution;
import org.apache.ibatis.annotations.Param;

import cn.b.sky.mes.mm.model.condition.DistributionCondition;
import cn.b.sky.mes.mm.model.condition.DistributionKanBanCondition;


/**
 * 
 * <strong>Title : DistributionDao.java<br></strong>
 * <strong>Package : cn.b.sky.mes.mm.dao<br></strong>
 * <strong>Description : </strong>配送需求Dao<br> 
 * <strong>Create on : 2016-9-14 下午3:19:13<br></strong>
 * <p>
 * @author JinQuan.Fu<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface DistributionDao {
  
  /**
   * 
   * <strong>Title : insertDistribution<br></strong>
   * <strong>Description : </strong>添加配送单<br> 
   * <strong>Create on : 2016-9-20 上午11:28:31<br></strong>
   * <p>
   * @param distribution
   * void
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertDistribution(Distribution distribution);

  /**
   * 
   * <strong>Title : groupMaterialRequirementQuantity<br></strong>
   * <strong>Description : </strong>查询 配送需求中物料、线边库、库位，状态为【创建】的【需配数量】之和<br> 
   * <strong>Create on : 2016-9-18 下午1:20:14<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param materialCode 物料
   * @param warehouseCode 仓库
   * @param storageLocationCode 库位
   * @param statusECode 状态
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  double groupMaterialDistributionQuantity(@Param("siteCode") String siteCode, @Param("materialCode") String materialCode,
      @Param("warehouseCode") String warehouseCode,@Param("storageLocationCode") String storageLocationCode,@Param("statusECode")String statusECode);
  
  /**
   * 
   * <strong>Title : selectDistributionListByCondition<br></strong>
   * <strong>Description : </strong>根据查询条件查询配送单<br> 
   * <strong>Create on : 2016-9-23 上午10:36:32<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Distribution>
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Distribution> selectDistributionListByCondition(DistributionCondition condition);
  
  /**
   * 
   * <strong>Title : selectDistributionCountByCondition<br></strong>
   * <strong>Description : </strong>查询配送单行数<br> 
   * <strong>Create on : 2016-9-23 上午10:37:00<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectDistributionCountByCondition(DistributionCondition condition);
  
  /**
   * 
   * <strong>Title : getDistributionByNum<br></strong>
   * <strong>Description : </strong>查询配送单<br> 
   * <strong>Create on : 2016-9-23 上午10:43:19<br></strong>
   * <p>
   * @param siteCode
   * @param distributionNum
   * @return
   * Distribution
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Distribution getDistributionByNum(@Param("siteCode")String siteCode,@Param("distributionNum")String distributionNum);

  /**
   * 
   * <strong>Title : cancelDistribution<br></strong>
   * <strong>Description : </strong>取消配送单<br> 
   * <strong>Create on : 2016-9-25 下午2:28:29<br></strong>
   * <p>
   * @param siteCode
   * @param distributionNum
   * @param statusECode
   * void
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void cancelDistribution(@Param("siteCode")String siteCode, @Param("distributionNum")String distributionNum, @Param("statusECode")String statusECode,
      @Param("modifyUser")String modifyUser, @Param("modifyDateTime")Date modifyDateTime);

  /**
   * 
   * <strong>Title : confirmServedDistribution<br></strong>
   * <strong>Description : </strong>确认送达<br> 
   * <strong>Create on : 2016-9-25 下午2:45:15<br></strong>
   * <p>
   * @param distribution
   * void
   * @throws 
   * @author JinQuan.Fu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void confirmServedDistribution(Distribution distribution);
  /**
   * 
   * <strong>Title : getDistributionsByRequirement<br></strong>
   * <strong>Description : </strong>获取需求配送列表<br> 
   * <strong>Create on : 2016年9月23日 下午1:34:42<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Distribution>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Distribution> getDistributionsByRequirement(DistributionCondition condition);

  /**
   * 
   * <strong>Title : getDistributionCountByRequirement<br></strong>
   * <strong>Description : </strong>获取需求的配送列表数量<br> 
   * <strong>Create on : 2016年9月23日 下午1:34:37<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getDistributionCountByRequirement(DistributionCondition condition);

  /**
   * 
   * <strong>Title : getDistributionsByRequirementNum<br></strong>
   * <strong>Description : </strong>获取需求配送列表<br> 
   * <strong>Create on : 2016年9月23日 下午1:36:17<br></strong>
   * <p>
   * @param siteCode
   * @param requirementNum
   * @return
   * List<Distribution>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Distribution> getDistributionsByRequirementNum(@Param("siteCode") String siteCode,
      @Param("requirementNum") String requirementNum);

  /**
   * 
   * <strong>Title : selectRequirementsKanBanByCondition<br></strong>
   * <strong>Description : </strong>获取需求看板数据<br> 
   * <strong>Create on : 2016-9-22 下午2:22:35<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Requirement>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Distribution> selectRequirementsKanBanByCondition(DistributionKanBanCondition condition);

  /**
   * 
   * <strong>Title : selectRequirementsKanBanCountByCondition<br></strong>
   * <strong>Description : </strong>获取需求看板数据总条数<br> 
   * <strong>Create on : 2016-9-22 下午7:37:10<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectRequirementsKanBanCountByCondition(DistributionKanBanCondition condition);
}
